/*
 * @lc app=leetcode.cn id=563 lang=cpp
 *
 * [563] 二叉树的坡度
 */

// @lc code=start
#include <bits/stdc++.h>
using namespace std;
// struct TreeNode {
//     int val;
//     TreeNode *left;
//     TreeNode *right;
//     TreeNode() : val(0), left(nullptr), right(nullptr) {}
//     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
//     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
// };

class Solution
{
    int ans = 0;
    int find(TreeNode *root)
    {
        if (root == nullptr)
            return 0;
        int l = 0, r = 0;
        l = find(root->left);
        r = find(root->right);

        ans += abs(l - r);

        return l + r + root->val;
    }

public:
    int findTilt(TreeNode *root)
    {
        ans = 0;
        find(root);
        return ans;
    }
};

// int main(int argc, char const *argv[])
// {
//     TreeNode l(2);
//     TreeNode r(3);
//     TreeNode root(1, &l, &r);
//     cout << Solution().findTilt(&root) << endl;
//     return 0;
// }


// @lc code=end
